#include <bits/stdc++.h>
using namespace std;
void get_next(string t,vector<int> &next)
{
    int i=0,j=-1;
    next[0]=-1;
    while(i<t.size()-1)
    {
        if(j==-1||t[i]==t[j])
        {
            next[++i]=++j;
        }
        else
        j=next[j];
    }
}
int kmp_search(string s,string t)
{
 int i=0,j=0;
 vector<int>next(t.size());
 get_next(t,next);
 while(j==-1||(i<s.size()&&j<t.size()))
 {
     if(j==-1||s[i]==t[j])
     {
         i++;
         j++;
     }
     else    j=next[j];
     
 }
 if(j==t.size())return i-j;
 return -1;
}
int main()
{
    cout<<kmp_search("hellp","ll")<<"\n";

}